home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / TEXT.I < prev    next >
Encoding:
Text File  |  1991-09-15  |  28.7 KB  |  3 lines

  1. ⓪ IMPLEMENTATION MODULE Text; (* V#107 *)⓪ (*$L-,R-,Y+,N+*)⓪ ⓪ (*⓪"18.7.87:  Read setzt ch auf 0C bei Fehlern⓪"22.7.87:  ReadString terminiert bei Ctrl-Zeichen⓪"15.9.87:  Read/Write auf Units über Treiberroutinen⓪"10.12.87: ReadString gibt CR/LF bei Eingabe v. CR o. LF aus⓪"03.01.88: Assembler-Version⓪"17.01.88: ReadBin neu, GetLast optimiert⓪"07.07.89: UndoRead wirkt auch auf ReadString⓪"04.08.89: Read/ReadBin/ReadString lesen bei 'readSeqTxt' nun viel schneller,⓪,weil ein interner Puffer verwendet wird.⓪"18.02.90: ReadBin liest Char nun im Seq-Mode, Read im Direct-Mode richtig⓪"17.12.90: ReadToken/ReadFromLine und TermCH implementiert⓪"31.01.91: ReadToken funktioniert nun auch auf Disk-Files⓪ *)⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER, LONGWORD, ADDRESS, WORD;⓪ ⓪ FROM FileBase IMPORT Unit, UDataProc, UCloseProc, UFlushProc, URStrProc,⓪(UWStrProc, UGChrProc;⓪ ⓪ FROM Files IMPORT File, @CheckState, EOF, Access;⓪ ⓪ FROM MOSGlobals IMPORT fInternalErr2, fEndOfFile, fBadAccess, fDoubleUndo,⓪(fDiskFull, fBadOp;⓪ ⓪ FROM MOSConfig IMPORT Separators;⓪ ⓪ (*$I FileDesc.Icl *)⓪ ⓪ (*$O+*)⓪ TYPE File = POINTER TO FileDesc;⓪ (*$O-*)⓪ ⓪ ⓪ PROCEDURE ErrHandler;⓪"BEGIN⓪$ASSEMBLER⓪(; File in A0⓪(MOVE.L  A0,(A3)+⓪(JMP     @CheckState⓪$END⓪"END ErrHandler;⓪ ⓪ PROCEDURE ErrHdl2;⓪"BEGIN⓪$ASSEMBLER⓪(SUBQ.L  #2,A3⓪(MOVE.L  A0,D0⓪(BEQ     T0⓪(CLR.W   File.state(A0)⓪%T0⓪$END⓪"END ErrHdl2;⓪ ⓪ PROCEDURE EOL (f: File): BOOLEAN;⓪"BEGIN⓪$ASSEMBLER⓪(MOVE.L  -(A3),D0⓪(BEQ     TR⓪(MOVE.L  D0,A0⓪(CMPI    #readSeqTxt,File.accmode(A0)⓪(BEQ     T0⓪(MOVE    #fBadOp,File.state(A0)⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪%TR MOVE    #1,(A3)+⓪(RTS⓪%T0 TST     File.eol(A0)⓪(BNE     TR⓪(MOVE.L  A0,(A3)+⓪(JMP     EOF⓪$END⓪"END EOL;⓪ ⓪ ⓪ PROCEDURE reloadBuffer ();⓪"BEGIN⓪$ASSEMBLER⓪(; IN:  A0:f⓪(; RET: D0.W:state⓪ ⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L  File.buffer(A0),-(A7)⓪(MOVEQ   #0,D0⓪(MOVE.W  File.bufsize(A0),D0⓪(MOVE.L  D0,-(A7)⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$3F,-(A7)⓪(TRAP    #1⓪(ADDA.W  #12,A7⓪(MOVEM.L (A7)+,A0/A1⓪(TST.L   D0⓪(BMI     error⓪(⓪(MOVE.W  D0,File.bufsize(A0)⓪(CLR.W   File.bufpos(A0)⓪(; !!! was ist, wenn Null Zeichen gelesen wurden - wird solch ein⓪(;     EOF schon vorher erkannt?⓪(CLR     D0⓪ ⓪&error⓪$END⓪"END reloadBuffer;⓪ ⓪ PROCEDURE getBufChar ();⓪"BEGIN⓪$ASSEMBLER⓪(; IN:  A0:f⓪ ⓪(MOVE.W  File.bufpos(A0),D0⓪(CMP.W   File.bufsize(A0),D0⓪(BNE     cont⓪(JSR     reloadBuffer⓪(BNE     error                   ; D0.W enthält neg. Fehlercode⓪&cont⓪(MOVE.L  File.buffer(A0),A2⓪(MOVE.B  0(A2,D0.W),D0⓪(ADDQ    #1,File.bufpos(A0)⓪&error⓪$END⓪"END getBufChar;⓪ ⓪ ⓪ PROCEDURE Read0 (VAR c:CHAR;f:File): BOOLEAN;  (* TRUE = Zeichen gültig *)⓪"(*⓪#* state # 0  ? -->   Err / FALSE⓪#* eof        ? -->   Err / FALSE⓪#* pos = len  ? --> binarymode ? --> ja: Err / FALSE; nein: FALSE⓪#* readerror  ? -->   FALSE⓪#* sonst TRUE⓪#*)⓪"BEGIN⓪$ASSEMBLER⓪(; A0: f, A1: c, D1 liefert BOOLEAN⓪(⓪(TST     File.state(A0)⓪(BMI.L   errerr⓪(⓪(TST     File.eof(A0)⓪(BNE.L   erreof⓪(⓪(TST     File.eol(A0)⓪(BEQ     again⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L  A0,(A3)+⓪(JSR     ReadLn⓪(MOVEM.L (A7)+,A0/A1⓪(⓪&again⓪(TST     File.ondisk(A0)⓪(BEQ     isunit⓪ ⓪(; von Disk lesen⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCC.L   eof⓪ ⓪(MOVE.B  File.lastch(A0),-(A7)⓪ ⓪(TST.L   File.buffer(A0)⓪(BNE     bufRead⓪ ⓪(MOVEM.L A0/A1,-(A7)⓪(PEA     File.lastch(A0)⓪(MOVEQ   #1,D0⓪(MOVE.L  D0,-(A7)⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$3F,-(A7)⓪(TRAP    #1⓪(ADDA.W  #12,A7⓪(MOVEM.L (A7)+,A0/A1⓪(TST.L   D0⓪(BMI     err2⓪(MOVE.B  File.lastch(A0),D0⓪(BRA.W   diskok⓪ ⓪&bufRead⓪(JSR     getBufChar      ; Char in D0⓪(TST.W   D0⓪(BPL     readok⓪ ⓪&err2⓪(MOVE.B  (A7)+,File.lastch(A0)⓪(MOVE    D0,File.state(A0)⓪(MOVEQ   #0,D1                   ; non-fatal error, Zeichen ungültig⓪(CLR.B   (A1)                    ; ch:= 0C⓪(BRA.L   end⓪ ⓪&isunit⓪(MOVE.B  File.lastch(A0),-(A7)⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L  File.uhandle(A0),(A3)+⓪(MOVE.L  File.urdchr(A0),A0⓪(JSR     (A0)⓪(MOVEM.L (A7)+,A0/A1⓪(MOVE    -(A3),D0⓪(BMI     err2⓪(MOVE.B  D0,File.lastch(A0)⓪(BRA     ok⓪$⓪'erreof⓪(MOVE    #fEndOfFile,D0⓪'err⓪(MOVE    D0,File.state(A0)⓪'errerr⓪(; ------------------ fatal error --------------⓪(MOVE.L  A0,(A3)+⓪(CLR.B   (A1)                    ; ch:= 0C⓪(MOVEM.L A0/A1,-(A7)⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪(MOVEM.L (A7)+,A0/A1⓪(CLR     (A3)+                   ; Abbruch⓪(RTS⓪ ⓪'errint2⓪(MOVE    #fInternalErr2,D0⓪(BRA     err⓪(⓪'eof⓪(BHI     errint2⓪(CMPI    #2,File.accmode(A0)     ; BINARY MODE ?⓪(BLS     erreof                  ; Ja, dann schon Error⓪(MOVE    #1,File.eof(A0)         ; sonst erstmal nur Flag setzen⓪(MOVE    #2,File.state(A0)⓪(CLR     D0⓪(MOVEQ   #0,D1                   ; Zeichen ungültig⓪(BRA     ok2⓪(⓪'readok⓪(MOVE.B  D0,File.lastch(A0)⓪'diskok⓪(ADDQ.L  #1,File.pos(A0)         ; Zeichen gelesen, also pos erhöhen⓪H; (wird bei Units sowieso ignoriert)⓪(CLR     D1                      ; kommt gleich nach File.state...⓪ ⓪'ok⓪(MOVE    D1,File.state(A0)⓪(ADDQ.L  #2,A7                   ;MOVE.B  (A7)+,File.prevch(A0)⓪(MOVEQ   #1,D1                   ; Zeichen gültig⓪(CMPI    #2,File.accmode(A0)     ; Binärmodus ?⓪(BLS     ok2                     ; ja-> kein EOL- und EOF-Test⓪(⓪(CMPI.B  #13,D0⓪(BEQ     eol⓪(CMPI.B  #10,D0⓪(BNE     ok0⓪(TST     File.skipLF(A0)⓪(BEQ     eol⓪(CLR     File.skipLF(A0)⓪(BRA     again⓪'eol⓪(MOVE    #1,File.eol(A0)         ; lastch wird das EOL-Zeichen enthalten⓪(MOVE    #1,File.state(A0)⓪(MOVEQ   #0,D1                   ; Zeichen ungültig⓪(CLR     D0⓪(⓪'ok0⓪(TST     File.chkeof(A0)⓪(BEQ     ok2                     ; Kein EOF-Test⓪(CMP.B   File.eofchr(A0),D0⓪(BNE     ok2⓪(MOVE    #1,File.eof(A0)⓪(MOVE    #2,File.state(A0)⓪(MOVEQ   #0,D1                   ; Zeichen ungültig⓪(CLR     D0⓪(⓪'ok2⓪(MOVE.B  D0,(A1)⓪(⓪'end⓪$END⓪"END Read0;⓪ ⓪ ⓪ PROCEDURE Read0Bin (VAR c:CHAR;f:File): BOOLEAN;  (* TRUE = Zeichen gültig *)⓪"(*⓪#* state # 0  ? -->   Err / FALSE⓪#* eof        ? -->   Err / FALSE⓪#* pos = len  ? --> binarymode ? --> ja: Err / FALSE; nein: FALSE⓪#* readerror  ? -->   FALSE⓪#* sonst TRUE⓪#*)⓪"BEGIN⓪$ASSEMBLER⓪(; A0: f, A1: c, D1 liefert BOOLEAN⓪(⓪(TST     File.state(A0)⓪(BMI.L   errerr⓪(⓪(TST     File.eof(A0)⓪(BNE.L   erreof⓪(⓪(TST     File.ondisk(A0)⓪(BEQ     isunit⓪(⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCC.L   eof⓪ ⓪(MOVE.B  File.lastch(A0),-(A7)⓪ ⓪(TST.L   File.buffer(A0)⓪(BNE     bufRead⓪ ⓪(MOVEM.L A0/A1,-(A7)⓪(PEA     File.lastch(A0)⓪(MOVEQ   #1,D0⓪(MOVE.L  D0,-(A7)⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$3F,-(A7)⓪(TRAP    #1⓪(ADDA.W  #12,A7⓪(MOVEM.L (A7)+,A0/A1⓪(TST.L   D0⓪(BMI     err2⓪(MOVE.B  File.lastch(A0),D0⓪(BRA.W   diskok⓪ ⓪&bufRead⓪(JSR     getBufChar      ; Char in D0⓪(TST.W   D0⓪(BPL     readok⓪ ⓪&err2⓪(MOVE.B  (A7)+,File.lastch(A0)⓪(MOVE    D0,File.state(A0)⓪(MOVEQ   #0,D1                   ; non-fatal error, Zeichen ungültig⓪(CLR.B   (A1)                    ; ch:= 0C⓪(BRA.L   end⓪$⓪&isunit⓪(MOVE.B  File.lastch(A0),-(A7)⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L  File.uhandle(A0),(A3)+⓪(MOVE.L  File.urdchr(A0),A0⓪(JSR     (A0)⓪(MOVEM.L (A7)+,A0/A1⓪(MOVE    -(A3),D0⓪(BMI     err2⓪(MOVE.B  D0,File.lastch(A0)⓪(BRA     ok⓪$⓪'erreof⓪(MOVE    #fEndOfFile,D0⓪'err⓪(MOVE    D0,File.state(A0)⓪'errerr⓪(; ------------------ fatal error --------------⓪(MOVE.L  A0,(A3)+⓪(CLR.B   (A1)                    ; ch:= 0C⓪(MOVEM.L A0/A1,-(A7)⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪(MOVEM.L (A7)+,A0/A1⓪(CLR     (A3)+                   ; Abbruch⓪(RTS⓪(⓪'errint2⓪(MOVE    #fInternalErr2,D0⓪(BRA     err⓪(⓪'eof⓪(BHI     errint2⓪(CMPI    #2,File.accmode(A0)     ; BINARY MODE ?⓪(BLS     erreof                  ; Ja, dann schon Error⓪(MOVE    #1,File.eof(A0)         ; sonst erstmal nur Flag setzen⓪(MOVE    #2,File.state(A0)⓪(CLR     D0⓪(MOVEQ   #0,D1                   ; Zeichen ungültig⓪(BRA     ok2⓪(⓪'readok⓪(MOVE.B  D0,File.lastch(A0)⓪'diskok⓪(CLR     D1⓪(ADDQ.L  #1,File.pos(A0)         ; Zeichen gelesen, also pos erhöhen⓪H; (wird bei Units sowieso ignoriert)⓪'ok⓪(MOVE    D1,File.state(A0)⓪(ADDQ.L  #2,A7                   ;MOVE.B  (A7)+,File.prevch(A0)⓪(MOVEQ   #1,D1                   ; Zeichen gültig⓪(⓪(CMPI    #2,File.accmode(A0)     ; Binärmodus ?⓪(BLS     ok2                     ; ja-> kein EOF-Test⓪(⓪(CLR     File.eol(A0)⓪(⓪(TST     File.chkeof(A0)⓪(BEQ     ok2                     ; Kein EOF-Test⓪(CMP.B   File.eofchr(A0),D0⓪(BNE     ok2⓪(MOVE    #1,File.eof(A0)⓪(MOVE    #2,File.state(A0)⓪H; Zeichen bleibt gültig⓪(⓪'ok2⓪(MOVE.B  D0,(A1)⓪(⓪'end⓪$END⓪"END Read0Bin;⓪ ⓪ ⓪ PROCEDURE GetLast (VAR c:CHAR;f:File);⓪"BEGIN⓪$ASSEMBLER⓪(; A0: f, A1: c⓪(⓪(CMPI    #2,File.accmode(A0)⓪(BLS     noget                   ; Bei Binärmodus nur Flag löschen⓪(MOVE.B  File.lastch(A0),D0⓪(CMPI.B  #13,D0⓪(BEQ     eol⓪(CMPI.B  #10,D0⓪(BNE     ok⓪&eol⓪(MOVE    #1,File.eol(A0)⓪(MOVE    #1,File.state(A0)⓪(CLR     D0⓪(BRA     ok2⓪&ok⓪(TST     File.chkeof(A0)⓪(BEQ     ok2                     ; Kein EOF-Test⓪(CMP.B   File.eofchr(A0),D0⓪(BNE     ok2⓪(MOVE    #1,File.eof(A0)⓪(MOVE    #2,File.state(A0)⓪(CLR     D0⓪&ok2⓪(MOVE.B  D0,(A1)⓪&noget⓪(CLR     File.getlast(A0)⓪$END⓪"END GetLast;⓪ ⓪ ⓪ PROCEDURE GetLastBin (VAR c:CHAR;f:File);⓪"BEGIN⓪$ASSEMBLER⓪(; A0: f, A1: c⓪(⓪(CMPI    #2,File.accmode(A0)⓪(BLS     noget                   ; Bei Binärmodus nur Flag löschen⓪(MOVE.B  File.lastch(A0),D0⓪(TST     File.chkeof(A0)⓪(BEQ     ok2                     ; Kein EOF-Test⓪(CMP.B   File.eofchr(A0),D0⓪(BNE     ok2⓪(MOVE    #1,File.eof(A0)⓪(MOVE    #2,File.state(A0)⓪&ok2⓪(MOVE.B  D0,(A1)⓪&noget⓪(CLR     File.getlast(A0)⓪$END⓪"END GetLastBin;⓪ ⓪ ⓪ PROCEDURE wr (f:File;c:CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(; c IN D0, f in A0; A1 nicht zerstören⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.B  D0,-(A7)⓪(MOVE.L  File.uhandle(A0),(A3)+⓪(MOVE.L  A7,(A3)+⓪(MOVEQ   #1,D0⓪(MOVE.L  D0,-(A7)⓪(MOVE.L  A7,(A3)+⓪(MOVE.L  File.uwrite(A0),A0⓪(JSR     (A0)⓪(ADDQ.L  #6,A7⓪(MOVEM.L (A7)+,A0/A1⓪(MOVE    -(A3),File.state(A0)⓪$END⓪"END wr;⓪"⓪ ⓪ PROCEDURE Read (f: File; VAR ch: CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),A1⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ     E1⓪(TST     File.getlast(A0)⓪(BEQ     T0⓪(JSR     GetLast⓪(BRA     E0⓪%T0 JSR     Read0⓪(BRA     E0⓪%E1 CLR.B   (A1)⓪%E0 UNLK    A5⓪$END;⓪"END Read;⓪ ⓪ ⓪ PROCEDURE ReadBin (f: File; VAR ch: CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),A1⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ     E1⓪(TST     File.getlast(A0)⓪(BEQ     T0⓪(JSR     GetLastBin⓪(BRA     E0⓪%T0 JSR     Read0Bin⓪(BRA     E0⓪%E1 CLR.B   (A1)⓪%E0 UNLK    A5⓪$END;⓪"END ReadBin;⓪ ⓪ ⓪ PROCEDURE UndoRead (f: File);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -4(A3),(A3)+⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ     E1⓪(MOVE.L  -(A3),A0⓪(TST     File.getlast(A0)⓪(BEQ     T0⓪(MOVE    #fDoubleUndo,File.state(A0)⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪(UNLK    A5⓪(RTS⓪%T0 CMPI    #3,File.accmode(A0)⓪(BCC     T1⓪(⓪(MOVE.L  A0,-(A7)⓪(MOVE.W  #1,-(A7)⓪(MOVE.W  File.handle(A0),-(A7)⓪(MOVEQ   #-1,D0⓪(MOVE.L  D0,-(A7)⓪(MOVE    #$42,-(A7)⓪(TRAP    #1⓪(ADDA.W  #10,A7⓪(MOVE.L  (A7)+,A0⓪(TST.L   D0⓪(BPL.L   noErr⓪(MOVE    D0,File.state(A0)⓪(UNLK    A5⓪(RTS⓪&noErr:⓪(MOVE.L  D0,File.pos(A0)⓪(⓪%T1 CLR     File.eof(A0)⓪(CLR     File.eol(A0)⓪(ADDQ.W  #1,File.getlast(A0)⓪(UNLK    A5⓪(RTS⓪%E1 SUBQ.L  #4,A3⓪(UNLK    A5⓪$END⓪"END UndoRead;⓪ ⓪ ⓪ PROCEDURE diskRead;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören !⓪(BRA     diskLoop⓪ ⓪%err2⓪(MOVE    D0,File.state(A0)       ; non-fatal error⓪(⓪%E0 RTS⓪(⓪%nfeof⓪(MOVE    #1,File.eof(A0)⓪(MOVE    #2,File.state(A0)⓪(RTS⓪(⓪%eof⓪(BHI     errint2⓪(CMPI    #2,File.accmode(A0)     ; BINARY MODE ?⓪(BHI.L   nfeof⓪%erreof⓪(MOVE    #fEndOfFile,D0⓪%err⓪(MOVE    D0,File.state(A0)⓪%errerr⓪(MOVE.L  A0,(A3)+⓪(JSR     ErrHandler              ; fatal error⓪(JMP     ErrHdl2⓪(⓪%errint2⓪(MOVE    #fInternalErr2,D0⓪(BRA     err⓪(⓪%diskLoop:⓪(MOVE    4(A7),D0⓪(CMP     6(A7),D0        ; index > HIGH (str) ?⓪(BHI     E0              ; dann ist String voll⓪(⓪(TST     File.state(A0)⓪(BMI     errerr⓪(⓪(TST     File.eof(A0)⓪(BNE     erreof⓪(⓪(TST     File.eol(A0)⓪(BEQ     again⓪(⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L  A0,(A3)+⓪(JSR     ReadLn⓪(MOVEM.L (A7)+,A0/A1⓪(⓪&again⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCC     eof⓪(⓪(TST.L   File.buffer(A0)⓪(BEQ     singleRead⓪ ⓪(JSR     getBufChar⓪(TST.W   D0⓪(BMI     err2⓪(MOVE.B  D0,(A1)⓪(BRA     diskok⓪ ⓪&singleRead⓪(MOVE.L  A0,-(A7)        ; f retten⓪(MOVE.L  A1,-(A7)        ; ADR(str) als Read-Adr⓪(MOVEQ   #1,D0⓪(MOVE.L  D0,-(A7)⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$3F,-(A7)⓪(TRAP    #1⓪(ADDQ.L  #8,A7⓪(MOVE.L  (A7)+,A1⓪(MOVE.L  (A7)+,A0⓪(TST.L   D0⓪(BMI     err2⓪ ⓪(MOVE.B  (A1),D0⓪ ⓪&diskok⓪(CLR     File.state(A0)⓪(ADDQ.L  #1,File.pos(A0)⓪(MOVE.B  D0,File.lastch(A0)⓪(⓪(CMPI    #2,File.accmode(A0)     ; Binärmodus ?⓪(BLS     valid                   ; ja-> kein EOL- und EOF-Test⓪(⓪(CMPI.B  #13,D0⓪(BEQ     eol⓪(CMPI.B  #10,D0⓪(BNE     ok0⓪(TST     File.skipLF(A0)⓪(BEQ     eol⓪(CLR     File.skipLF(A0)⓪(BRA     again⓪'eol⓪(MOVEQ   #1,D0⓪(MOVE    D0,File.eol(A0)         ; lastch wird das EOL-Zeichen enthalten⓪(MOVE    D0,File.state(A0)⓪(RTS⓪(⓪'doBS⓪(TST     4(A7)⓪(BEQ     diskLoop⓪(SUBQ    #1,4(A7)⓪(SUBQ    #1,A1⓪(BRA     diskLoop⓪(⓪'ok0⓪(TST     File.chkeof(A0)⓪(BEQ     valid                   ; Kein EOF-Test⓪(CMP.B   File.eofchr(A0),D0⓪(BEQ     nfeof⓪(⓪&valid⓪(CMPI.B  #8,D0           ; Backspace ?⓪(BEQ     doBS⓪(ADDQ    #1,4(A7)        ; index⓪(ADDQ.L  #1,A1⓪(CMPI.B  #' ',D0⓪(BCC     diskLoop⓪(; Ende bei Ctrl-Zeichen⓪$END;⓪"END diskRead;⓪ ⓪ PROCEDURE unitRead;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören !⓪%loop⓪(MOVE    4(A7),D0⓪(CMP     6(A7),D0        ; index > HIGH (str) ?⓪(BHI     E0              ; dann ist String voll⓪(⓪(JSR     Read0⓪(TST     D1⓪(BEQ     E0⓪(⓪(MOVE.B  (A1),D0⓪(CMPI.B  #8,D0⓪(BEQ     DOBS⓪(CMPI.B  #' ',D0⓪(BCS     E0⓪&NORM⓪(ADDQ.L  #1,A1⓪(ADDQ    #1,4(A7)⓪(BRA     loop⓪&DOBS⓪(TST     4(A7)⓪(BEQ     loop⓪(SUBQ.L  #1,A1⓪(SUBQ    #1,4(A7)⓪(BRA     loop⓪%E0⓪$END⓪"END unitRead;⓪ ⓪ PROCEDURE ReadString (f: File; VAR str: ARRAY OF CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -10(A3),(A3)+⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ     E1⓪(⓪(MOVE.W  -(A3),-(A7)     ; HIGH(str)⓪(MOVE.L  -(A3),A1        ; str⓪(MOVE.L  -(A3),A0        ; f⓪(⓪(TST     File.eof(A0)⓪(BEQ     noeof⓪(⓪(CLR.B   (A1)⓪(MOVE    #fEndOfFile,File.state(A0)⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪(UNLK    A5⓪(RTS⓪(⓪%E1 SUBQ.L  #2,A3⓪(MOVE.L  -(A3),A0⓪(CLR.B   (A0)⓪(SUBQ.L  #4,A3⓪(UNLK    A5⓪(RTS⓪(⓪%noeof:⓪(CLR     -(A7)           ; index⓪(⓪(TST     File.getlast(A0)⓪(BEQ     noLast⓪(JSR     GetLast⓪(ADDQ.W  #1,(A7)         ; INC (index)⓪(ADDQ.L  #1,A1⓪%noLast:⓪ ⓪(TST     File.ondisk(A0)⓪(BEQ     isunit⓪(⓪(JSR     diskRead⓪(BRA     E0⓪(⓪%isunit⓪(JSR     unitRead⓪(⓪%E0 ; String mit Null abschließen⓪(MOVE    (A7)+,D0        ; index⓪(MOVE    (A7)+,D1        ; HIGH⓪(CMP     D1,D0⓪(BHI     E2⓪(CLR.B   (A1)⓪%E2 UNLK    A5⓪$END⓪"END ReadString;⓪ ⓪ ⓪ PROCEDURE diskReadFrom;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören !⓪(BRA     diskLoop⓪ ⓪%err2⓪(MOVE    D0,File.state(A0)       ; non-fatal error⓪(⓪%E0 RTS⓪(⓪%nfeof⓪(MOVE    #1,File.eof(A0)⓪(MOVE    #2,File.state(A0)⓪(RTS⓪(⓪%eof⓪(BHI     errint2⓪(CMPI    #2,File.accmode(A0)     ; BINARY MODE ?⓪(BHI.L   nfeof⓪%erreof⓪(MOVE    #fEndOfFile,D0⓪%err⓪(MOVE    D0,File.state(A0)⓪%errerr⓪(MOVE.L  A0,(A3)+⓪(JSR     ErrHandler              ; fatal error⓪(JMP     ErrHdl2⓪(⓪%errint2⓪(MOVE    #fInternalErr2,D0⓪(BRA     err⓪(⓪%diskLoop:⓪(MOVE    4(A7),D0⓪(CMP     6(A7),D0        ; index > HIGH (str) ?⓪(BHI     E0              ; dann ist String voll⓪(⓪(TST     File.state(A0)⓪(BMI     errerr⓪(⓪(TST     File.eof(A0)⓪(BNE     erreof⓪(⓪(TST     File.eol(A0)⓪(BEQ     again⓪(⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L  A0,(A3)+⓪(JSR     ReadLn⓪(MOVEM.L (A7)+,A0/A1⓪(⓪&again⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCC     eof⓪(⓪(TST.L   File.buffer(A0)⓪(BEQ     singleRead⓪ ⓪(JSR     getBufChar⓪(TST.W   D0⓪(BMI     err2⓪(MOVE.B  D0,(A1)⓪(BRA     diskok⓪ ⓪&singleRead⓪(MOVE.L  A0,-(A7)        ; f retten⓪(MOVE.L  A1,-(A7)        ; ADR(str) als Read-Adr⓪(MOVEQ   #1,D0⓪(MOVE.L  D0,-(A7)⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$3F,-(A7)⓪(TRAP    #1⓪(ADDQ.L  #8,A7⓪(MOVE.L  (A7)+,A1⓪(MOVE.L  (A7)+,A0⓪(TST.L   D0⓪(BMI     err2⓪ ⓪(MOVE.B  (A1),D0⓪ ⓪&diskok⓪(CLR     File.state(A0)⓪(ADDQ.L  #1,File.pos(A0)⓪(MOVE.B  D0,File.lastch(A0)⓪(⓪(CMPI    #2,File.accmode(A0)     ; Binärmodus ?⓪(BLS     valid                   ; ja-> kein EOL- und EOF-Test⓪(⓪(CMPI.B  #13,D0⓪(BEQ     eol⓪(CMPI.B  #10,D0⓪(BNE     ok0⓪(TST     File.skipLF(A0)⓪(BEQ     eol⓪(CLR     File.skipLF(A0)⓪(BRA     again⓪'eol⓪(MOVEQ   #1,D0⓪(MOVE    D0,File.eol(A0)         ; lastch wird das EOL-Zeichen enthalten⓪(MOVE    D0,File.state(A0)⓪(RTS⓪(⓪'doBS⓪(TST     4(A7)⓪(BEQ     diskLoop⓪(SUBQ    #1,4(A7)⓪(SUBQ    #1,A1⓪(BRA     diskLoop⓪(⓪'ok0⓪(TST     File.chkeof(A0)⓪(BEQ     valid                   ; Kein EOF-Test⓪(CMP.B   File.eofchr(A0),D0⓪(BEQ     nfeof⓪(⓪&valid⓪(CMPI.B  #8,D0           ; Backspace ?⓪(BEQ     doBS⓪(ADDQ    #1,4(A7)        ; index⓪(ADDQ.L  #1,A1⓪(BRA     diskLoop⓪$END;⓪"END diskReadFrom;⓪ ⓪ PROCEDURE unitReadFrom;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören !⓪%loop⓪(MOVE    4(A7),D0⓪(CMP     6(A7),D0        ; index > HIGH (str) ?⓪(BHI     E0              ; dann ist String voll⓪(⓪(JSR     Read0⓪(TST     D1⓪(BEQ     E0⓪(⓪(MOVE.B  (A1),D0⓪(CMPI.B  #8,D0⓪(BEQ     DOBS⓪(ADDQ.L  #1,A1⓪(ADDQ    #1,4(A7)⓪(BRA     loop⓪&DOBS⓪(TST     4(A7)⓪(BEQ     loop⓪(SUBQ.L  #1,A1⓪(SUBQ    #1,4(A7)⓪(BRA     loop⓪%E0⓪$END⓪"END unitReadFrom;⓪ ⓪ PROCEDURE ReadFromLine (f: File; VAR str: ARRAY OF CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -10(A3),(A3)+⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ     E1⓪(⓪(MOVE.W  -(A3),-(A7)     ; HIGH(str)⓪(MOVE.L  -(A3),A1        ; str⓪(MOVE.L  -(A3),A0        ; f⓪(⓪(TST     File.eof(A0)⓪(BEQ     noeof⓪(⓪(CLR.B   (A1)⓪(MOVE    #fEndOfFile,File.state(A0)⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪(UNLK    A5⓪(RTS⓪(⓪%E1 SUBQ.L  #2,A3⓪(MOVE.L  -(A3),A0⓪(CLR.B   (A0)⓪(SUBQ.L  #4,A3⓪(UNLK    A5⓪(RTS⓪(⓪%noeof:⓪(CLR     -(A7)           ; index⓪(⓪(TST     File.getlast(A0)⓪(BEQ     noLast⓪(JSR     GetLast⓪(ADDQ.W  #1,(A7)         ; INC (index)⓪(ADDQ.L  #1,A1⓪%noLast:⓪ ⓪(TST     File.ondisk(A0)⓪(BEQ     isunit⓪(⓪(JSR     diskReadFrom⓪(BRA     E0⓪(⓪%isunit⓪(JSR     unitReadFrom⓪(⓪%E0 ; String mit Null abschließen⓪(MOVE    (A7)+,D0        ; index⓪(MOVE    (A7)+,D1        ; HIGH⓪(CMP     D1,D0⓪(BHI     E2⓪(CLR.B   (A1)⓪%E2 UNLK    A5⓪$END⓪"END ReadFromLine;⓪ ⓪ ⓪ PROCEDURE diskReadToken;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören!⓪(BRA     diskLoop⓪ ⓪%err2⓪(MOVE    D0,File.state(A0)       ; non-fatal error⓪(⓪%E0 RTS⓪(⓪%nfeof⓪(MOVE    #1,File.eof(A0)⓪(MOVE    #2,File.state(A0)⓪(RTS⓪(⓪%eof⓪(BHI     errint2⓪(CMPI    #2,File.accmode(A0)     ; BINARY MODE ?⓪(BHI.L   nfeof⓪%erreof⓪(MOVE    #fEndOfFile,D0⓪%err⓪(MOVE    D0,File.state(A0)⓪%errerr⓪(MOVE.L  A0,(A3)+⓪(JSR     ErrHandler              ; fatal error⓪(JMP     ErrHdl2⓪(⓪%errint2⓪(MOVE    #fInternalErr2,D0⓪(BRA     err⓪(⓪%diskLoop:⓪(MOVE    6(A7),D0⓪(CMP     8(A7),D0        ; index > HIGH (str)?⓪(BHI     E0              ; dann ist String voll⓪(⓪(TST     File.state(A0)⓪(BMI     errerr⓪(⓪(TST     File.eof(A0)⓪(BNE     erreof⓪(⓪(TST     File.eol(A0)⓪(BEQ     again⓪(⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L  A0,(A3)+⓪(JSR     ReadLn⓪(MOVEM.L (A7)+,A0/A1⓪(⓪&again⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCC     eof⓪(⓪(TST.L   File.buffer(A0)⓪(BEQ     singleRead⓪ ⓪(JSR     getBufChar⓪(TST.W   D0⓪(BMI     err2⓪(MOVE.B  D0,(A1)⓪(BRA     diskok⓪ ⓪&singleRead⓪(MOVE.L  A0,-(A7)        ; f retten⓪(MOVE.L  A1,-(A7)        ; ADR(str) als Read-Adr⓪(MOVEQ   #1,D0⓪(MOVE.L  D0,-(A7)⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$3F,-(A7)⓪(TRAP    #1⓪(ADDQ.L  #8,A7⓪(MOVE.L  (A7)+,A1⓪(MOVE.L  (A7)+,A0⓪(TST.L   D0⓪(BMI     err2⓪ ⓪(MOVEQ   #0,D0⓪(MOVE.B  (A1),D0⓪ ⓪&diskok⓪(ADDQ.L  #1,File.pos(A0)⓪(MOVE.B  D0,File.lastch(A0)⓪(⓪(CMPI    #2,File.accmode(A0)     ; Binärmodus ?⓪(BLS     valid                   ; ja-> kein EOL- und EOF-Test⓪(⓪(CMPI.B  #13,D0⓪(BEQ     eol⓪(CMPI.B  #10,D0⓪(BNE     ok0⓪(TST     File.skipLF(A0)⓪(BEQ     eol⓪(CLR     File.skipLF(A0)⓪(BRA     again⓪'eol⓪(MOVEQ   #1,D0⓪(MOVE    D0,File.eol(A0)         ; lastch wird das EOL-Zeichen enthalten⓪(MOVE    D0,File.state(A0)⓪(; CR & LF sind immer Separatoren⓪(TST.W   4(A7)           ; inWord?⓪(BNE     ende            ; dann Ende⓪(BRA     diskLoop        ; sonst ignorieren⓪(⓪&(*⓪'doBS⓪(TST     6(A7)⓪(BEQ     diskLoop⓪(SUBQ    #1,6(A7)⓪(SUBQ    #1,A1⓪(BRA     diskLoop⓪&*)⓪(⓪'ok0⓪(TST     File.chkeof(A0)⓪(BEQ     valid                   ; Kein EOF-Test⓪(CMP.B   File.eofchr(A0),D0⓪(BEQ     nfeof⓪(⓪&valid⓪(LEA     Separators,A2⓪(MOVE.W  D0,D2⓪(LSR.W   #3,D0⓪(BTST    D2,0(A2,D0.W)⓪(BEQ     isToken⓪(⓪(; Es ist ein Separator⓪(TST.W   4(A7)           ; inWord?⓪(BNE     endeOK          ; dann Ende⓪(BRA     diskLoop        ; sonst ignorieren⓪(⓪&isToken:⓪(MOVE    #1,4(A7)        ; inWord:= TRUE⓪(ADDQ.L  #1,A1           ; INC (destptr)⓪(ADDQ    #1,6(A7)        ; INC (index)⓪(BRA     diskLoop⓪(⓪&(* alt:⓪(CMPI.B  #8,D0           ; Backspace ?⓪(BEQ     doBS⓪(ADDQ    #1,6(A7)        ; index⓪(ADDQ.L  #1,A1⓪(LEA     Separators,A2⓪(MOVE.W  D0,D2⓪(LSR.W   #3,D0⓪(BTST    D2,0(A2,D0.W)⓪(BEQ     diskLoop⓪(; Ende bei Ctrl-Zeichen⓪&*)⓪&endeOK:⓪(CLR     File.state(A0)⓪&ende:⓪$END;⓪"END diskReadToken;⓪ ⓪ PROCEDURE unitReadToken;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören!⓪%loop⓪(MOVE    6(A7),D0⓪(CMP     8(A7),D0        ; index > HIGH (str)?⓪(BHI     E0              ; dann ist String voll⓪(⓪(JSR     Read0⓪(TST     D1⓪(BEQ     E0⓪(⓪(MOVEQ   #0,D0⓪(MOVE.B  (A1),D0⓪((*⓪*CMPI.B  #8,D0⓪*BEQ     DOBS⓪(*)⓪(LEA     Separators,A2⓪(MOVE.W  D0,D2⓪(LSR.W   #3,D0⓪(BTST    D2,0(A2,D0.W)⓪(BEQ     isToken⓪(⓪(; Es ist ein Separator⓪(TST.W   4(A7)           ; inWord?⓪(BNE     E0              ; dann Ende⓪(BRA     loop            ; sonst ignorieren⓪(⓪&isToken:⓪(MOVE    #1,4(A7)        ; inWord:= TRUE⓪(ADDQ.L  #1,A1⓪(ADDQ    #1,6(A7)⓪(BRA     loop⓪((*⓪(DOBS⓪*TST     6(A7)⓪*BEQ     loop⓪*SUBQ.L  #1,A1⓪*SUBQ    #1,6(A7)⓪*BRA     loop⓪(*)⓪%E0⓪$END⓪"END unitReadToken;⓪ ⓪ PROCEDURE ReadToken (f: File; VAR str: ARRAY OF CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -10(A3),(A3)+⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ     E1⓪(⓪(MOVE.W  -(A3),-(A7)     ; HIGH(str)⓪(MOVE.L  -(A3),A1        ; str⓪(MOVE.L  -(A3),A0        ; f⓪(⓪(TST     File.eof(A0)⓪(BEQ     noeof⓪(⓪(CLR.B   (A1)⓪(MOVE    #fEndOfFile,File.state(A0)⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪(UNLK    A5⓪(RTS⓪(⓪%E1 SUBQ.L  #2,A3⓪(MOVE.L  -(A3),A0⓪(CLR.B   (A0)⓪(SUBQ.L  #4,A3⓪(UNLK    A5⓪(RTS⓪(⓪%noeof:⓪(CLR     -(A7)           ; index⓪(CLR     -(A7)           ; inWord⓪(⓪(TST     File.getlast(A0)⓪(BEQ     noLast⓪(JSR     GetLast⓪(CLR     D0⓪(MOVE.B  (A1),D0⓪(LEA     Separators,A2⓪(MOVE.W  D0,D2⓪(LSR.W   #3,D0⓪(BTST    D2,0(A2,D0.W)⓪(BNE     noLast          ; war ein Begrenzer -> überlesen⓪(MOVE.W  #1,(A7)         ; inWord:= TRUE⓪(ADDQ.W  #1,2(A7)        ; INC (index)⓪(ADDQ.L  #1,A1⓪%noLast:⓪ ⓪(TST     File.ondisk(A0)⓪(BEQ     isunit⓪(⓪(JSR     diskReadToken⓪(BRA     E0⓪(⓪%isunit⓪(JSR     unitReadToken⓪(⓪%E0 ; String mit Null abschließen⓪(ADDQ.L  #2,A7           ; inWord⓪(MOVE    (A7)+,D0        ; index⓪(MOVE    (A7)+,D1        ; HIGH⓪(CMP     D1,D0⓪(BHI     E2⓪(CLR.B   (A1)⓪%E2 UNLK    A5⓪$END⓪"END ReadToken;⓪ ⓪ PROCEDURE TermCH (f: File): CHAR;⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -4(A3),(A3)+⓪(JSR     @CheckState⓪(CLR     D0⓪(TST     -(A3)⓪(BEQ     E1⓪(MOVE.B  File.lastch(A0),D0⓪%E1 MOVE.B  D0,(A3)+⓪(ADDQ.L  #1,A3⓪(UNLK    A5⓪$END⓪"END TermCH;⓪ ⓪ PROCEDURE ReadLn (f: File);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),D0⓪(MOVE.L  D0,A0⓪(BEQ     EE⓪(CMPI    #readSeqTxt,File.accmode(A0)⓪(BEQ     T0⓪(MOVE    #fBadOp,File.state(A0)⓪%EE JSR     ErrHandler⓪(JSR     ErrHdl2⓪(UNLK    A5⓪(RTS⓪%T0 MOVE.L  A0,(A3)+⓪(JSR     EOF⓪(TST     -(A3)⓪(BNE     E0⓪(TST     File.eol(A0)⓪(BNE     T1⓪(MOVE.L  A0,-(A7)⓪(MOVE.L  A0,(A3)+⓪(CLR     -(A7)⓪(MOVE.L  A7,(A3)+⓪(JSR     Read⓪(ADDQ.L  #2,A7⓪(MOVE.L  (A7)+,A0⓪(BRA     T0⓪%T1 CLR     File.eol(A0)⓪(CMPI.B  #13,File.lastch(A0)⓪(SEQ     D0⓪(ANDI    #1,D0⓪(MOVE    D0,File.skipLF(A0)⓪%E0 UNLK    A5⓪$END⓪"END ReadLn;⓪ ⓪ ⓪ PROCEDURE write (f:File; start: ADDRESS; len: CARDINAL);⓪"BEGIN⓪$ASSEMBLER⓪(; A1: start, D1: len, f noch auf Heap⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ.L   end⓪(⓪(MOVE    File.accmode(A0),D0     ; CMPI    #readOnly,File.accmode(A0)⓪(BEQ     badAcc⓪(CMPI    #readSeqTxt,D0⓪(BEQ     badAcc⓪(⓪(TST     File.ondisk(A0)⓪(BEQ     isunit⓪(⓪(MOVE.L  A0,-(A7)⓪(MOVE.L  A1,-(A7)        ; adr⓪(MOVE.L  D1,-(A7)        ; len⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$40,-(A7)⓪(TRAP    #1⓪(ADDQ.L  #4,A7⓪(MOVE.L  (A7)+,D1⓪(ADDQ.L  #4,A7⓪(MOVE.L  (A7)+,A0⓪(MOVE    #1,File.modified(A0)⓪(TST.L   D0⓪(BPL     ok⓪(MOVE    D0,File.state(A0)⓪(BRA     end⓪(⓪'badAcc:⓪(MOVE    #fBadAccess,File.state(A0)⓪(MOVE.L  A0,(A3)+⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪(BRA     end⓪(⓪'isunit:⓪(MOVE.L  A0,-(A7)⓪(MOVE.L  File.uhandle(A0),(A3)+⓪(MOVE.L  A1,(A3)+        ; adr⓪(MOVE.L  D1,-(A7)⓪(MOVE.L  A7,(A3)+        ; len⓪(MOVE.L  File.uwrite(A0),A0⓪(JSR     (A0)⓪(ADDQ.L  #4,A7⓪(MOVE.L  (A7)+,A0⓪(MOVE    -(A3),File.state(A0)⓪(BRA     end⓪(⓪'ok:⓪(CMP.L   D0,D1⓪(BLS     ok2⓪(MOVE    #fDiskFull,File.state(A0)⓪(BRA     end⓪'ok2:⓪(CLR     File.state(A0)⓪(ADD.L   D1,File.pos(A0)⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCS     end⓪(MOVE.L  D0,File.len(A0)⓪'end:⓪(UNLK    A5⓪$END⓪"END write;⓪ ⓪ ⓪ PROCEDURE Write (f: File; ch: CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE    -(A3),-(A7)⓪(MOVE.L  A7,A1⓪(MOVEQ   #1,D1⓪(JMP     write⓪$END⓪"END Write;⓪ ⓪ PROCEDURE WriteLn (f: File);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE    #$0D0A,-(A7)⓪(MOVE.L  A7,A1⓪(MOVEQ   #2,D1⓪(JMP     write⓪$END⓪"END WriteLn;⓪ ⓪ PROCEDURE WritePg (f: File);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.B  #$0C,-(A7)⓪(MOVE.L  A7,A1⓪(MOVEQ   #1,D1⓪(JMP     write⓪$END⓪"END WritePg;⓪ ⓪ PROCEDURE WriteString (f: File; REF str: ARRAY OF CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(⓪(MOVE   -(A3),D1⓪(MOVE.L -(A3),A1⓪(⓪(; A1: start, D1: len, f noch auf Heap⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ.L   end⓪(⓪(MOVE    File.accmode(A0),D0     ; CMPI    #readOnly,File.accmode(A0)⓪(BEQ     badAcc⓪(CMPI    #readSeqTxt,D0⓪(BEQ     badAcc⓪(⓪(TST     File.ondisk(A0)⓪(BEQ     isunit⓪(⓪(MOVE.L  A0,-(A7)⓪(MOVE.L  A1,-(A7)        ; adr⓪(⓪(MOVE.L A1,D0⓪ l       TST.B  (A1)+⓪(DBEQ   D1,l⓪(BNE    c⓪(SUBQ.L #1,A1⓪ c       MOVE.L A1,D1⓪(SUB.L  D0,D1⓪(⓪(MOVE.L  D1,-(A7)        ; len⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$40,-(A7)⓪(TRAP    #1⓪(ADDQ.L  #4,A7⓪(MOVE.L  (A7)+,D1⓪(ADDQ.L  #4,A7⓪(MOVE.L  (A7)+,A0⓪(MOVE    #1,File.modified(A0)⓪(TST.L   D0⓪(BPL     ok⓪(MOVE    D0,File.state(A0)⓪(BRA     end⓪(⓪'badAcc:⓪(MOVE    #fBadAccess,File.state(A0)⓪(MOVE.L  A0,(A3)+⓪(JSR     ErrHandler⓪(JSR     ErrHdl2⓪(BRA     end⓪(⓪'isunit:⓪(MOVE.L  A0,-(A7)⓪(MOVE.L  File.uhandle(A0),(A3)+⓪(MOVE.L  A1,(A3)+        ; adr⓪(MOVE    D1,(A3)+        ; HIGH⓪(MOVE.L  File.uwrstr(A0),A0⓪(JSR     (A0)⓪(MOVE.L  (A7)+,A0⓪(MOVE    -(A3),File.state(A0)⓪(BRA     end⓪(⓪'ok:⓪(CMP.L   D0,D1⓪(BLS     ok2⓪(MOVE    #fDiskFull,File.state(A0)⓪(BRA     end⓪'ok2:⓪(CLR     File.state(A0)⓪(ADD.L   D1,File.pos(A0)⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCS     end⓪(MOVE.L  D0,File.len(A0)⓪'end:⓪(UNLK    A5⓪$END⓪"END WriteString;⓪ ⓪ END Text.⓪ ə
  2. (* $00006702$00002DF0$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFEC6A8D$FFFD5FA4$FFFD5FA4$FFF8E766$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFC35A0$FFF8E766$FFFC37CF$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4Ç$00000966T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00007029$00000754$00000966$00005718$00005539$00005716$0000538E$00000754$0000070E$00000A74$00000754$00000966$0000001C$FFECF630$00007029$0000001CîÇâ*)
  3.